NLBにElastic IP(EIP)をアタッチしてもそのIPが使われない場合がある
インターネット向けのNLB(Network Load Balancer)を作成する場合は、必要に応じてサブネットごとにElastic IPアドレス(以下EIP)を指定することができます。
ですが状況によってはこのEIPが使われないケースがあることを学びましたので、レポートします。
もう少し厳密に書くと、NLB作成時に指定したサブネットが一部使われないケースがあります。従ってそのサブネットのEIPが使われなくなります。
結論から先に
2サブネットにまたがるインターネット向けNLBを作成したとします。 アベイラビリティーゾーン(以下AZ)毎に1サブネットのみ選択可能なため、これは2AZにまたがるNLBとも言えます。
それぞれのAZ毎にEIPを指定します。つまり2つのEIPがこのNLBには紐付いています。
この時、NLBエンドポイント(DNS名)に対するdigコマンド結果は以下になります。
- Healthyなターゲットリソースがないとき → 2IP
- 片方のAZにだけターゲットリソースがある → 1IP(リソースがある方のIPのみ)
- 上記状態からクロスゾーン負荷分散有効 → しばらくしてから2IPに
- クロスゾーン負荷分散無効で、ターゲットリソース配置AZを変える → IPが変わる(さっきまで使われていなかったEIP、つまり新しくターゲットが配置されたAZのEIPが使われる)
解説
クロスゾーン負荷分散とは
クロスゾーン負荷分散が無効な場合は、ロードバランサーのノードは、同じAZ上に存在するターゲットに対してのみトラフィックを流します。
逆にクロスゾーン負荷分散が有効な場合は、ノードはAZを気にせず同じAZ上のターゲットにも、異なるAZ上のターゲットにも、両方にトラフィックを流します。
NLBのデフォルトはクロスゾーン負荷分散無効
NLBはクロスゾーン負荷分散の設定が無効の状態で作成されます。以下はNLB作成直後の設定状態です。
特定のAZにしかターゲットがいなかったら?
では、クロスゾーン負荷分散無効、かつターゲットリソースが 無い AZのロードバランサーノードはどこにトラフィックを転送するのでしょうか?
こういう場合、そもそもそのAZにノードは作成されません。
故にそのAZ(のサブネット)に設定されたEIPも使われません。
やってみた
EIP作成
EIPは2つ作成します。 NLBはサブネットごとにEIPを指定でき、かつ今回は2サブネット(AZ)にまたがるインターネット向けNLBを作成するためです。
NLB作成 (Healthyなターゲットなし)
この状態でdigコマンドでドメイン名からIPアドレスを調べてみましょう。
$ dig eip2-xxxxxxxx.elb.ap-northeast-1.amazonaws.com +short 54.248.204.82 54.178.120.103
設定したEIPが両方返ってきてますね。
片方のAZにのみターゲットを配置
片方のAZのみにターゲットを登録しました。
※今回は 前回のエントリの構成を使用しているので、AuroraインスタンスのIPを登録しています。
しばらくすると…
$ dig eip2-xxxxxxxx.elb.ap-northeast-1.amazonaws.com +short 54.248.204.82
レスポンスが一行減りました。ターゲットはap-northeast-1aに存在しているので、ap-northeast-1c の方のIP 54.178.120.103
が減っています。
クロスゾーン負荷分散を有効にする
この状態で、クロスゾーン負荷分散を有効にしてみます。前述のとおりロードバランサーノードのAZとターゲットのAZが同じである必要がなくなるので、ap-northeast-1c の方のIP 54.178.120.103
も復活するはずです。
設定変更後1分くらいで 54.178.120.103
も返却されるようになりました。予想通りです。
$ dig eip2-xxxxxxxx.elb.ap-northeast-1.amazonaws.com +short 54.248.204.82 54.178.120.103
クロスゾーン負荷分散を無効にしたうえで、ターゲットのAZを変更
クロスゾーン負荷分散を無効に戻した上で、ターゲットが配置されているAZを変えてみます。
ap-northeast-1c の方のIP 54.178.120.103
だけが返って、1aの54.248.204.82
は返ってこなくなるはずです。
しばらくすると… healthyになりました。再度digしてみます。
$ dig eip2-xxxxxxxx.elb.ap-northeast-1.amazonaws.com +short 54.178.120.103
予想通りになりました!
まとめ
NLBにEIPをアタッチしてもそのIPが使われない場合があるという話から、クロスゾーン負荷分散やNLBとAZの関係性についてご紹介しました。NLBの理解の一助になれば幸いです。